package com.br.egaragens.activitys;



import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


import com.br.egaragens.R;
import com.br.egaragens.controles.EmpresasController;
import com.br.egaragens.controles.VeiculoController;
import com.br.egaragens.entidades.Empresa;
import com.br.egaragens.entidades.TipoVeiculo;
import com.br.egaragens.entidades.Veiculo;
import com.br.egaragens.interfaces.IEntidade;
import com.br.egaragens.util.Util;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Vibrator;
import android.text.Html;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class FinalizaEntrada extends Activity implements OnClickListener{
	private SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy");
	private static DecimalFormat formatoMoeda = new DecimalFormat("##,###,###,##0.00");
	private EditText edtPlaca;
	private TextView txtTipoCarro;
	private TextView txtDataHoraEntrada;
	private TextView txtDataHoraSaida;
	private TextView txtValoHora;
	private TextView txtValoHorafracionda;
	private TextView txtValoHora1;
	private TextView txtValoHorafracionda1;
	private TextView txtTotalHora;
	private TextView txtTotalHoraValor;
	private TextView txtValores;
	private Button btnFinalizar;
	private Button btnFecharHoras;
	private Veiculo veiculo;
	private VeiculoController veiculoController;
	private EmpresasController empresaController;
	private Empresa empresa;
	private long difHoras;
	private int hora;
	private int minutos;
	private int totalminutos;
	private double vlrHoraCheia;
	private double vlrHoraFracionada;
	private double vlrTotal;
	private int tolerancia;
	private SimpleDateFormat dtForm = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.finaliza_entrada);
		veiculo = (Veiculo) getIntent().getSerializableExtra("veiculo");
		empresaController = new EmpresasController(getBaseContext());
		empresa = (Empresa) empresaController.getAll().get(0);
		tolerancia = empresa.getTolerancia();
		setButtons();
		if(empresa.getTipoCobranca() == 1){
			realizaEntradaComHoraNormal();
		}else{
			realizaEntradaComHoraFracionada();
		}

	}

	private void realizaEntradaComHoraNormal() {
		
		if(veiculo != null && veiculo.getDtHoraEntrada() !=null){
			Date d =new Date( veiculo.getDtHoraEntrada());
			edtPlaca.setText(veiculo.getPlaca());
			txtTipoCarro.setText("Ve�culo "+veiculo.getTipo());

			//txtDataHoraEntrada.setText("Entrada: "+format.format(d)+" - "+d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));

			if(veiculo.getTipo() == TipoVeiculo.Grande){
				txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoGrande()));
				txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoGrandeAdicional()));
				txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
			}else
				if(veiculo.getTipo() == TipoVeiculo.Medio){
					txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoMedio()));
					txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoMedioAdicional()));
					txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
				}
				else{
					txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoMoto()));
					txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoMotoAdicional()));
					txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
				}
			System.out.println("Cont veiculos fina "+veiculoController.count());
		}

		if(veiculo != null && veiculo.getDtHoraSaida() != null){
			setTxtVisiveis();
			veiculo.setStatus(true);

			Date dEntrada = new Date( veiculo.getDtHoraEntrada());
			Date dSaida=new Date( veiculo.getDtHoraSaida());

			edtPlaca.setText(veiculo.getPlaca());
			txtTipoCarro.setText("Ve�culo "+veiculo.getTipo());
			txtDataHoraSaida.setText(format.format(dEntrada)+" "+dEntrada.getHours()+"h"+(dEntrada.getMinutes()<10?
					"0"+dEntrada.getMinutes():dEntrada.getMinutes())+" - "+format.format(dSaida)+" "+dSaida.getHours()+
					"h"+(dSaida.getMinutes()<10?"0"+dSaida.getMinutes():dSaida.getMinutes()));

			difHoras = dSaida.getTime() - dEntrada.getTime();
			totalminutos = (int) difHoras /1000/60;

			hora =(int)difHoras /1000/60/60;
			minutos= (int) difHoras /1000 /60 %60;
			int h =hora;
			int t = dSaida.getMinutes()-dEntrada.getMinutes();
			t= t < 0 ? t+60 : t ;
			
			if(veiculo.getTipo() == TipoVeiculo.Grande){
				vlrHoraCheia = Util.empresa.getPrecoGrande();
				vlrHoraFracionada = Util.empresa.getPrecoGrandeAdicional();
				txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
				txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
				txtValores.setText("Valores: ");
				if(totalminutos > 60){
					hora = (totalminutos /60)-1;
					minutos = totalminutos %60;
					if(minutos > tolerancia){
						vlrTotal+= (double) vlrHoraFracionada*1;
					}
					vlrTotal+= (double) vlrHoraCheia + ( vlrHoraFracionada * hora);
				}else{
					
					if(totalminutos > tolerancia)
						vlrTotal+= vlrHoraCheia;
					else
						vlrTotal=0.0;
				}
				txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
				if(veiculo.getTipoEntrada().equals("V")){
					txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
				}else{
					Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
					txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
					veiculo.setValorTotalHora(v);
				}
				
			}else
				if(veiculo.getTipo() == TipoVeiculo.Medio){
					vlrHoraCheia = Util.empresa.getPrecoMedio();
					vlrHoraFracionada = Util.empresa.getPrecoMedioAdicional();
					txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
					txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
					txtValores.setText("Valores: ");
					if(totalminutos > 60){
						hora = (totalminutos /60)-1;
						minutos = totalminutos %60;
						if(minutos > tolerancia){
							vlrTotal+= (double) vlrHoraFracionada*1;
						}
						vlrTotal+= (double) vlrHoraCheia + ( vlrHoraFracionada * hora);
					}else{
						if(totalminutos > tolerancia)
							vlrTotal+= vlrHoraCheia;
						else
							vlrTotal=0.0;
					}
					txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
					if(veiculo.getTipoEntrada().equals("V")){
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
					}else{
						Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
						veiculo.setValorTotalHora(v);
					}
				}else{
					vlrHoraCheia = Util.empresa.getPrecoMoto();
					vlrHoraFracionada = Util.empresa.getPrecoMotoAdicional();
					txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
					txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
					txtValores.setText("Valores: ");
					
					if(totalminutos > 60){
						hora = (totalminutos /60)-1;
						minutos = totalminutos %60;
						if(minutos >tolerancia){
							vlrTotal+= (double) vlrHoraFracionada*1;
						}
						vlrTotal+= (double) vlrHoraCheia + ( vlrHoraFracionada * hora);
					}else{
						
						if(totalminutos > tolerancia)
							vlrTotal+= vlrHoraCheia;
						else
							vlrTotal=0.0;
					}
					txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
					if(veiculo.getTipoEntrada().equals("V")){
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
					}else{
						Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
						veiculo.setValorTotalHora(v);
					}
				}
			veiculoController.atualizar(veiculo);

		}
	}
	private void realizaEntradaComHoraFracionada() {

		if(veiculo != null){

			Date d = new Date(veiculo.getDtHoraEntrada());
			edtPlaca.setText(veiculo.getPlaca());
			txtTipoCarro.setText("Ve�culo "+veiculo.getTipo());

			if(veiculo.getTipo() == TipoVeiculo.Grande){
				txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoGrande()));
				txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoGrandeAdicional()));
				txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
			}else
				if(veiculo.getTipo() == TipoVeiculo.Medio){
					txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoMedio()));
					txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoMedioAdicional()));
					txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
				}
				else{
					txtValoHora.setText(" R$ "+formatoMoeda.format(Util.empresa.getPrecoMoto()));
					txtValoHorafracionda.setText(" R$"+formatoMoeda.format(Util.empresa.getPrecoMotoAdicional()));
					txtDataHoraEntrada.setText(d.getHours()+"h"+(d.getMinutes() < 10?"0"+d.getMinutes():d.getMinutes()));
				}
		}

		if(veiculo != null && veiculo.getDtHoraSaida() != null){
			setTxtVisiveis();
			veiculo.setStatus(true);
			Date dEntrada = new Date( veiculo.getDtHoraEntrada());
			Date dSaida= new Date(veiculo.getDtHoraSaida());

			edtPlaca.setText(veiculo.getPlaca());
			txtTipoCarro.setText("Ve�culo "+veiculo.getTipo());
			txtDataHoraSaida.setText(format.format(dEntrada)+" "+dEntrada.getHours()+"h"+(dEntrada.getMinutes()<10?"0"+dEntrada.getMinutes():dEntrada.getMinutes())+" - "+format.format(dSaida)+" "+dSaida.getHours()+"h"+(dSaida.getMinutes()<10?"0"+dSaida.getMinutes():dSaida.getMinutes()));

			difHoras = dSaida.getTime() - dEntrada.getTime();
			totalminutos = (int) difHoras /1000/60;

			hora =(int)difHoras /1000/60/60;
			minutos= (int) difHoras /1000 /60 %60;
			int h = hora;
			int t = dSaida.getMinutes()-dEntrada.getMinutes();
			t= t < 0 ? t+60 : t ;

			if(veiculo.getTipo() == TipoVeiculo.Grande){
				vlrHoraCheia = Util.empresa.getPrecoGrande();
				vlrHoraFracionada = Util.empresa.getPrecoGrandeAdicional();
				txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
				txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
				txtValores.setText("Valores: ");
				if(totalminutos > 60){
					vlrTotal+= (double) vlrHoraCheia+ ((vlrHoraFracionada/60)*(totalminutos-60));
				}else{
					vlrTotal+= vlrHoraCheia;
				}

				txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
				if(veiculo.getTipoEntrada().equals("V")){
					txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
				}else{
					Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
					txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
					veiculo.setValorTotalHora(v);
				}
			}else
				if(veiculo.getTipo() == TipoVeiculo.Medio){
					vlrHoraCheia = Util.empresa.getPrecoMedio();
					vlrHoraFracionada = Util.empresa.getPrecoMedioAdicional();
					txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
					txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
					txtValores.setText("Valores: ");
					if(totalminutos > 60){
						vlrTotal+= (double) vlrHoraCheia+ ((vlrHoraFracionada/60)*(totalminutos-60));
					}else{
						vlrTotal+= vlrHoraCheia;
					}
					txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
					if(veiculo.getTipoEntrada().equals("V")){
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
					}else{
						Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
						veiculo.setValorTotalHora(v);
					}
				}else{
					vlrHoraCheia = Util.empresa.getPrecoMoto();
					vlrHoraFracionada = Util.empresa.getPrecoMotoAdicional();
					txtValoHora1.setText("R$ "+formatoMoeda.format(vlrHoraCheia).toString());
					txtValoHorafracionda1.setText(" R$ "+formatoMoeda.format(vlrHoraFracionada).toString());
					txtValores.setText("Valores: ");
					if(totalminutos > 60){
						vlrTotal+= (double) vlrHoraCheia+ ((vlrHoraFracionada/60)*(totalminutos-60));
					}else{
						vlrTotal+= vlrHoraCheia;
					}
					txtTotalHora.setText("Total: "+h+"h"+(t < 10 ? "0"+t : t));
					if(veiculo.getTipoEntrada().equals("V")){
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(veiculo.getValorTotalHora()));
					}else{
						Double v = (vlrTotal - veiculo.getValorTotalHora()) < 0 ? 0.00 : (vlrTotal - veiculo.getValorTotalHora());
						txtTotalHoraValor.setText(" R$ "+formatoMoeda.format(v));
						veiculo.setValorTotalHora(v);
					}
				}
			veiculoController.atualizar(veiculo);

		}
	}
	public void setButtons(){
		edtPlaca = (EditText) findViewById(R.id.edtPlaca);

		txtTipoCarro = (TextView) findViewById(R.id.txtTipoCarro);
		txtDataHoraEntrada = (TextView) findViewById(R.id.txtDataHoraEntrada);
		txtValoHora = (TextView) findViewById(R.id.txtPreco1);
		txtValoHorafracionda = (TextView) findViewById(R.id.txtPreco2);
		
		txtValoHora1 = (TextView) findViewById(R.id.txtPreco11);
		txtValoHorafracionda1 = (TextView) findViewById(R.id.txtPreco22);
		txtValoHora1.setVisibility(View.GONE);
		txtValoHorafracionda1.setVisibility(View.GONE);
		txtDataHoraSaida = (TextView) findViewById(R.id.txtDataHoraSaida);
		txtTotalHora = (TextView) findViewById(R.id.txtTotalHora);
		txtTotalHoraValor = (TextView) findViewById(R.id.txtTotalHoraValor);
		txtTotalHoraValor.setVisibility(View.GONE);
		txtValores = (TextView) findViewById(R.id.txtValoresHora);

		txtValores.setVisibility(View.GONE);
		txtDataHoraSaida.setVisibility(View.GONE);
		txtTotalHora.setVisibility(View.GONE);
		

		btnFinalizar = (Button) findViewById(R.id.btnGravar);
		btnFinalizar.setOnClickListener(this);

		btnFecharHoras = (Button) findViewById(R.id.BtnFecharHoras);
		btnFecharHoras.setOnClickListener(this);
		btnFecharHoras.setVisibility(View.GONE);

		veiculoController = new VeiculoController(getBaseContext());
	}
	public void setTxtVisiveis(){
		txtDataHoraSaida.setVisibility(View.VISIBLE);
		txtTotalHora.setVisibility(View.VISIBLE);
		txtValores.setVisibility(View.VISIBLE);
		btnFecharHoras.setVisibility(View.VISIBLE);
		txtValoHora1.setVisibility(View.VISIBLE);
		txtTotalHoraValor.setVisibility(View.VISIBLE);
		txtValoHorafracionda1.setVisibility(View.VISIBLE);
		txtDataHoraEntrada.setVisibility(View.GONE);
		btnFinalizar.setVisibility(View.GONE);
		txtValoHora.setVisibility(View.GONE);
		txtValoHorafracionda.setVisibility(View.GONE);
	}
	public void onClick(View v) {

		if(v.getId() == btnFecharHoras.getId()){
			vibrate(120);
			if(veiculoController.atualizar(veiculo)){

				AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
				alBuilder.setTitle("Aten��o!");
				alBuilder.setMessage("Fechamento realizado com sucesso!");
				alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

					public void onClick(DialogInterface dialog, int which) {
						vibrate(120);
						finish();
					}
				});

				alBuilder.show();
			}
			else{
				AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
				alBuilder.setTitle("Aten��o!");
				alBuilder.setMessage("N�o foi possivel realizar o fechameto do veiculo!");
				alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

					public void onClick(DialogInterface dialog, int which) {
						vibrate(120);
						finish();
					}
				});
				alBuilder.show();
			}


		}


		if(v.getId() == btnFinalizar.getId()){
			vibrate(120);
			AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
			alBuilder.setTitle("Aten��o!");
			alBuilder.setMessage("Entrada realizada com sucesso!");
			alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

				public void onClick(DialogInterface dialog, int which) {
					vibrate(120);
					finish();
				}
			});
			alBuilder.show();
			System.out.println("Cont veiculos OK "+veiculoController.count());
		}

	}
	private void vibrate(long tempo) {
		Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
		vibrator.vibrate(tempo);
	}


}
